Docker buildx 小记 |
您所在的位置:网站首页 › go dockerfile 打包arm64 › Docker buildx 小记 |
多阶段构建 Docker 17.05 版本之前,多阶段构建通常,要么放在一个很大的 Dockerfile 里面。编译打包时间非常长;或者 编写多个 Dockerfile,再通过 shell 脚本将他们组合起来,但生成的镜像会非常大。 Docker 17.05 开始,需要在一个Dockerfile 就可以完成多阶段构建。 通过 as 为其创建别名使用更佳! FROM golang:alpine as builder RUN apk --no-cache add git WORKDIR /go/src/github.com/go/helloworld/ RUN go get -d -v github.com/go-sql-driver/mysql COPY app.go . RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . FROM alpine:latest as prod RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=builder /go/src/github.com/go/helloworld/app . CMD ["./app"]我们看到最实用的,就是 COPY 参数,可以从某一阶段(任意镜像文件)复制你想要的文件 只构建某一阶段通过 as 给某一阶段命名后,增加 --target=builder 参数即 docker build --target builder -t username/imagename:tag . BuildxDocker Buildx 是一个 docker CLI 插件,其扩展了 docker 命令,支持 Moby BuildKit 提供的功能。 一般我们通过官网的指导下载 docker(19.03版本以上),都会自带这个插件,不用再单独安装。 docker buildx build -t self/httpd:v1 -f ./Dockerfile . 创建多架构镜像之前的版本中构建多种系统架构支持的 Docker 镜像,要想使用统一的名字必须使用 $ docker manifest 命令。 Docker 19.03+ 版本中可以使用 docker buildx build 命令使用 BuildKit 构建镜像。该命令支持 --platform 参数可以同时构建支持多种系统架构的 Docker 镜像,大大简化了构建步骤。 第一步 安装 binfmtbinfmt_mischandler 这个二进制是 `BuildKit` 能支持多架构的关键。我们直接跑容器就可以了: docker run --privileged --rm tonistiigi/binfmt --install all第二步 构建自己的 builder 实例docker buildx create --use --name mybuilder --platform=linux/amd64,linux/arm64 --node golang-buildkit-amd64 --driver=docker-container参数详情参考: docker buildx create --help第三步 登录镜像仓库docker login这里默认是登录 DockerHub,之后提示输入对应的账号密码即可。 第四步构建镜像并推送docker buildx build --platform linux/amd64,linux/arm64 -t /:latest --push .记得带上支持的平台参数 --platform; --push 也是必须的,这样它会自动帮你推送到镜像仓库。 第五步 校验是否成功我们拉下来镜像后: # docker buildx imagetools inspect onehand/build-test:latest Name: docker.io/onehand/build-test:latest MediaType: application/vnd.docker.distribution.manifest.list.v2+json Digest: sha256:a67f5511dd3b71834f0552c01d9d2dbdf8e207db582387b72e6a63a2308e94de Manifests: Name: docker.io/onehand/build-test:latest@sha256:beb5ffc022ebd44cc629d52b0cd4bb418f6c86492fec3dccc5f248f3120ec14f MediaType: application/vnd.docker.distribution.manifest.v2+json Platform: linux/amd64 Name: docker.io/onehand/build-test:latest@sha256:67eff09ae3dc1bfbdd9b52212784c1cc32fc4717162654f8916760f0466d2901 MediaType: application/vnd.docker.distribution.manifest.v2+json Platform: linux/arm64可以看到 manifests 支持的两个Platform 到这里构建双架构镜像就算制作完成了。 当我们使用 docker pull 的时候,docker 会自动为我们选择操作系统架构对应的镜像 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |